package cn.hycat.leetcode.middle;

/**
 * @author 吕泽浩业
 * @version 1.0
 */
/*实现 pow(x, n) ，即计算 x 的 n 次幂函数（即，xn ）
        示例 1：

        输入：x = 2.00000, n = 10
        输出：1024.00000
        示例 2：

        输入：x = 2.10000, n = 3
        输出：9.26100
        示例 3：

        输入：x = 2.00000, n = -2
        输出：0.25000
        解释：2-2 = 1/22 = 1/4 = 0.25*/
public class L50Pow_x_n {
    public static double myPow(double x, int n) {
        //如果n为-2147483648 先+1 因为正的最大int为2147483647
        if(n == Integer.MIN_VALUE) ++n;

        //n如果为负数先用正数算  最后用1/ans
        int m = n < 0 ? -n : n;
        double ans = 1;
        double temp = x;

        while (m != 0) {
            if((m & 1) == 1) {
                ans *= temp;
            }
            temp *= temp;
            m = m >> 1;
        }
        if(n == Integer.MIN_VALUE) ans *= x;
        return n < 0 ? 1/ans : ans;
    }

    public static void main(String[] args) {
        System.out.println(myPow(2.00000, -2));
    }
}
